// 登录与注册模块
import { reqCode, userRegister, userLogin, reqUserInfo, reqLogout } from '@/api'
// 引入操作token的函数
import { setToken, getToken, removeToken } from '@/utils/token'

const state = {
  code: '',
  token: getToken(),
  userInfo: {}
}
const mutations = {
  // 获取验证码
  GETCODE(state, code) {
    state.code = code
  },
  // 用户登录：token
  USERLOGIN(state, token) {
    state.token = token
  },
  // 获取用户信息
  GETUSERINFO(state, userInfo) {
    state.userInfo = userInfo
  },
  // 清楚本地数据
  CLEAR(state) {
    // 把仓库中用户相关信息清除
    state.token = ''
    state.userInfo = {}
    // 本地存储数据清空
    removeToken()
  }
}
const actions = {
  // 获取验证码 
  async getCode({ commit }, phone) {
    let { data: res } = await reqCode(phone)
    if (res.code == 200) {
      commit('GETCODE', res.data)
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 用户注册
  async userRegister({ commit }, userInfo) {
    let { data: res } = await userRegister(userInfo)
    if (res.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 用户登录
  async userLogin({ commit }, userInfo) {
    let { data: res } = await userLogin(userInfo)
    // 服务器下发token，用户唯一标识符（uuid）
    // 将来经常通过带token找服务器要用户信息进行展示
    if (res.code == 200) {
      // 用户登录成功，且获取到token
      commit('USERLOGIN', res.data.token)
      // 持久化存储token：调用设置token的函数【传参过去进行存储】
      setToken(res.data.token)
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 获取用户信息
  async getUserInfo({ commit }) {
    let { data: res } = await reqUserInfo()
    if (res.code == 200) {
      commit('GETUSERINFO', res.data)
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },
  // 退出登录
  async logOut({ commit }) {
    let { data: res } = await reqLogout()
    if (res.code == 200) {
      // action里面不能操作state，提交mutation进行修改state
      commit('CLEAR')
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  }
}
const getters = {}


export default {
  state,
  mutations,
  actions,
  getters
}